home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / systems / atari / birkhahn-metafont-packed-disks / mf27-2_2e-disk2.zoo / doc.lzh / INSTALL.DOC < prev    next >
Text File  |  1991-09-10  |  17KB  |  336 lines

  1.                Spezifikation zu einem neuen Install-Programm
  2.                =============================================
  3.  
  4. Autoren          : Lutz Birkhahn, Stefan Lindner
  5.  
  6. History:
  7. Version|  Datum   | Erläuterung
  8. -------|----------|---------------------------------------------------------
  9.   0.0  | 16/05/90 | Urfassung (Lutz Birkhahn, Stefan Lindner)
  10.   0.5  |    90-91 | Prototyp (Stefan Steffens)
  11.   0.9  | 27/06/91 | Testversion (Lutz Birkhahn = LB)
  12.   0.99 | 05/07/91 | ß-Test (LB)
  13.   0.991| 12/07/91 | Filevariable source-dir eingeführt (LB)
  14.   0.992| 22/08/91 | #setdir funktioniert jetzt auch im Root-Directory (LB)
  15.        |          | TOS-Fehlermeldungen bei #execute werden beim Namen genannt
  16.   0.993| 28/08/91 | bei #extract und #copy kann nun "alles ersetzt" werden,
  17.        |          |   #copy achtet nun auch auf bereits vorhandene Dateien 
  18.        |          | Datum/Uhrzeit und Attribute werden jetzt mitkopiert (LB)
  19.   1.0  | 11/09/91 | In #pathrequest kann nun ein Ordner (als Filename) ein-
  20.        |          |   gegeben und damit erzeugt werden. (LB)
  21.        |          | Die Pfade sind nun alle in klein geschrieben (auch in
  22.        |          |   #replace-Strings). (LB)
  23. -------|----------|---------------------------------------------------------
  24.  
  25.  
  26. (Anmerkung: Wie der Titel sagt, handelt es sich bei dieser Datei um eine
  27. Spezifikation bzw. eine daraus entstandene Dokumentation. Es ist möglich,
  28. da₧ die eine oder andere Beschreibung nicht komplett auf den momentanen
  29. Zustand des Programmes zutrifft. In diesem Fall ist die entsprechende
  30. Beschreibung als Wunsch für zukünftige Versionen aufzufassen.)
  31.  
  32.  
  33. 1. Ziele
  34. ========
  35.  
  36.   Das neue Install-Programm soll das bisher existierende Install-Programm
  37.    vollständig ersetzen.
  38.   Die Install-Datei soll wesentlich besser lesbar und damit auch leichter
  39.    vom Benutzer an eigene Bedürfnisse anpa₧bar sein.
  40.   Der Benutzer soll die Möglichkeit haben, die Installation nach seinen
  41.    Wünschen auch ohne Änderung der Install-Datei modifizieren zu können
  42.    (sog. Teilinstallationen).
  43.   Die Installation soll insgesamt noch sicherer werden, z.B. durch Abfrage
  44.    des vorhandenen Speicherplatzes auf der Festplatte und durch Überprüfung,
  45.    ob die eingelegte Diskette auch die richtige ist.
  46.   Das Install-Programm soll unabhängig vom zu installierenden Paket sein;
  47.    prinzipiell sollte jedes beliebige Programm mit einer geeigneten Install-
  48.    Datei installiert werden können.
  49.  
  50.  
  51. 2. Prinzipieller Programmablauf
  52. ===============================
  53. Nach dem Starten des Install-Programmes wird zunächst (per Fileselektorbox)
  54. eine Install-Datei ausgewählt. Die Install-Datei mu₧ dort stehen, wo auch die
  55. ganzen zu installierenden Dateien (bzw. deren Verzeichnisse) sich befinden,
  56. im Normalfall also im Root-Verzeichnis auf der Diskette. Alternativ kann man
  57. sich die Dateien aber auch auf die Festplatte oder in eine Ramdisk kopieren,
  58. dann mu₧ aber auch die Install-Datei von dort ausgewählt werden.
  59.       Grund: alle "Source"-Dateien werden mit einem relativem Pfad
  60.       angegeben (z.B. "tex\tex.ttp"). Das Install-Prg. hängt dann
  61.       noch den Pfad, wo es die Install-Datei gefunden hat (z.B. "a:\"
  62.       oder "c:\tmp\"), davor und lädt von dort alle zu kopierenden
  63.       Dateien.
  64. Install-Dateien haben im allgemeinen den Namen des zu installierenden Pakets
  65. (TeX, METAFONT, Preview, NECP6, SLM804, NL10 ...) und als Extension die
  66. Zeichenfolge ".INS", also z.B. "TEX.INS".
  67.  
  68. Nun wird die Installdatei eingelesen (die komplette Datei wird zunächst in
  69. einen Puffer gelesen, damit die Diskette auch gewechselt werden kann, falls
  70. von Diskette installiert wird), und Befehl für Befehl abgearbeitet. Im
  71. Normalfall wird am Anfang der Datei eine Folge von #banner-, #menu- und
  72. #showmenu-Befehlen stehen, woraufhin der Benutzer eine GEM-Dialogbox mit
  73. dem beschriebenen Inhalt bekommt, in der er den gewünschten Umfang der
  74. Installation auswählen kann. Abhängig von den selektierten Optionen werden
  75. boolesche Variablen gesetzt, die von den #if/#then/#else-Befehlen ausgewer-
  76. tet werden können. Wenn ein Diskettenwechsel nötig ist, erscheint eine
  77. Alertbox mit entsprechendem Inhalt (natürlich nur, wenn von Laufwerk A:
  78. oder B: installiert wird). Wenn Fehler auftreten, wird dies vom Install-
  79. Programm automatisch in Alertboxen mitgeteilt, z.B. "Prüfsummenfehler
  80. beim Kopieren der Datei metafont\inimf.prg. [Nochmal versuchen][Ignorieren]
  81. [Abbruch]" und entsprechend des angeklickten Buttons weiterverfahren.
  82.  
  83. Sobald die Installation beendet ist, wird die Anzahl der aufgetretenen Fehler,
  84. Probleme oder Warnungen bzw. eine Erfolgsmeldung ausgegeben. Schlie₧lich kann
  85. der Benutzer auswählen, ob er ein weiteres Paket installieren oder das Install-
  86. Programm beenden möchte.
  87.  
  88.  
  89. 3. Syntax der Install-Datei
  90. ===========================
  91. Die Install-Datei ist formatfrei, d.h. es können an jeder Stelle zwischen
  92. den syntaktischen Elementen ("Wörtern") beliebig viele Leerzeichen, TABs,
  93. Zeilenschaltungen (CR/LF) und Kommentare stehen; das Zeilenende wird nicht
  94. ausgewertet. Sie besteht aus beliebig vielen Befehlen mit entsprechender
  95. Parameteranzahl. Kommentare werden mit einem Prozentzeichen ("%") eingeleitet
  96. und gelten bis zum Zeilenende (genau wie bei TeX, METAFONT etc.).
  97.  
  98. Die Syntaxbeschreibung erfolgt in EBNF in ähnlicher Form wie die Beschreibung
  99. der Setup-Datei in Stefan Lindners TeX-Beschreibung:
  100.  
  101. ::=            das nichtterminale Symbol auf der linken Seite wird durch die
  102.                rechte Seite definiert
  103. <name>         nichtterminales Symbol
  104. |              Alternative ("oder")
  105. [ausdruck]     Ausdruck ist optional
  106. (ausdruck)*    Ausdruck darf beliebig oft (auch gar nicht) auftreten
  107. (ausdruck)+    Ausdruck darf ein- oder mehrmal auftreten
  108.  
  109. Terminale Symbole werden ohne schmückendes Beiwerk hingeschrieben. Kommentare
  110. und mehrfach auftretende Leerzeichen etc. werden nicht mit aufgeführt, siehe
  111. oben. Die Semantik der einzelnen Befehle wird nach der Syntaxbeschreibung
  112. erläutert.
  113.  
  114.  
  115. <install file>    ::= <commands>
  116. <commands>        ::= (<command>)+
  117. <command>         ::= #banner "<string>"
  118.                     | #menu "<string>" <boolean var>
  119.                     | #showmenu
  120.                     | #print "<string>"
  121.                     | #pathrequest "<string>" <file var>
  122.                     | #request "<string>" [<boolean var>]
  123.                     | #if <boolean var> <commands> [#else <commands>] #fi
  124.                     | #requiredspace <abspath> <size>
  125.                     | #setdir <abspath>
  126.                     | #copy <relfile> [<checksum>]
  127.                     | #extract <relfile> <pattern>
  128.                     | #replace "<string>" "<string>" <absfile>
  129.                     | #checkdisklabel <filename>
  130.                     | #execute <abspath> (<parameter>)*
  131.                     | #end
  132. <absfile>         ::= <drive>:\<path>\<filename>
  133.                     | <file var>[\<path>][\<filename>]
  134. <abspath>         ::= <drive>:\<path>
  135.                     | <file var>[\<path>]
  136. <relfile>         ::=          <path>\<filename>
  137. <path>            ::= [<filename>](\<filename>)*
  138. <checksum>        ::= <hex digit><hex digit><hex digit><hex digit>
  139. <size>            ::= <integer>
  140.                     | <integer>k  | <integer>K
  141.                     | <integer>m  | <integer>M
  142. <boolean var>     ::= <variable>
  143. <file var>        ::= <variable>
  144.  
  145. Der Rest sollte sich ziemlich von selbst erklären, aber der Vollständigkeit
  146. halber noch die informellen Definitionen (Puristen und Masochisten dürfen
  147. sich die restlichen Definitionen auch formal auf ein Schmierblatt notieren):
  148.  
  149. <drive>           ein Buchstabe von 'a' bis 'p' (gro₧ oder klein geschrieben)
  150. <filename>        sind maximal 8 Zeichen und optional ein Punkt ('.') und
  151.                   bis zu drei weitere Zeichen. Zeichen ist in diesem Zusammen-
  152.                   hang alles au₧er '.', ':', '\', '?' und '*' (TOS verkraftet
  153.                   ziemlich viel)
  154. <pattern>         ist ein <filename>, der auch '?' und '*' enthalten darf (an
  155.                   den bei TOS erlaubten Stellen)
  156. <string>          ist alles au₧er doppelte Anführungszeichen ('"'). Letztere
  157.                   werden als '\"' geschrieben (wie in C üblich). Ein Zeilen-
  158.                   ende, das nicht im String auftauchen soll, wird durch ein
  159.                   vorangestelltes '\' eingegeben (also '\' am Zeilenende).
  160.                   '\\' wird durch ein einzelnes '\' ersetzt. Wenn der Anfang
  161.                   des Strings den Namen einer Filevariablen <file var> angibt,
  162.                   wird deren Inhalt in den String eingefügt
  163. <variable>        ist eine Folge von Zeichen au₧er '\', '.', ':', '#' und
  164.                   den verschiedenen "Leerzeichen"
  165. <hex digit>       ist eine Ziffer (0-9) oder (a-f) oder (A-F)
  166. <integer>         ist eine ganze positive Zahl (das mu₧ nicht weiter erklärt
  167.                   werden, oder?!)
  168.  
  169.  
  170. Nun zur Semantik der einzelnen Befehle:
  171.  
  172. #banner "<string>"
  173.    <string> wird in der bei #showmenu erscheinenden Dialogbox als Überschrift
  174.    angezeigt. Wenn vor einem #showmenu mehrere #banner angegeben sind, so wird
  175.    nur der letzte verwendet.
  176.  
  177.    Bsp.:    #banner "TeX-Installation"
  178.  
  179.  
  180. #menu "<string>" <boolean var>
  181.    Gibt eine auszuwählende Option in der bei #showmenu erscheinenden Dialog-
  182.    box an. Mit Hilfe von <string> wird ein erklärender Text und maximal zwei
  183.    Buttons angegeben. Buttons werden durch Umschlie₧en des Button-Textes mit
  184.    eckigen Klammern eingegeben. Wenn ein Button-Text mit einem Ausrufezeichen
  185.    anfängt, so ist dieser Button bereits zu Beginn des Dialogs selektiert.
  186.    Wenn zwei Buttons spezifiziert werden, so werden diese als Radio-Buttons
  187.    dargestellt, von denen der erste (linke) Button defaultmä₧ig selektiert
  188.    ist, wenn kein '!' angegeben wurde. Ein einzelner Button ist defaultmä₧ig
  189.    nicht selektiert. Wenn das Zeichen '[', ']' oder '!' selbst ausgegeben
  190.    werden soll, so kann dies an den betreffenden Stellen durch Voranstellen
  191.    eines Backslash ('\') erfolgen. Die boolesche Variable <boolean var>
  192.    erhält den Wert true, wenn der linke (bzw. einzige) Button selektiert
  193.    wurde.
  194.  
  195.  
  196. #showmenu
  197.    Bringt die bisher angesammelten #banner- und #menu-Befehle in einer Dialog-
  198.    box auf den Bildschirm und wartet auf die Auswahl des Benutzers. Die selek-
  199.    tierten Optionen werden in den bei #menu angegebenen booleschen Variablen
  200.    als true eingetragen, die restlichen boolschen Variablen werden auf false
  201.    gesetzt.
  202.  
  203.  
  204. #print "<string>"
  205.    Gibt <string> als Text auf dem Bildschirm aus.
  206.  
  207.  
  208. #pathrequest "<string>" <file var>
  209.    Öffnet eine Fileselektorbox und speichert den ausgewählten Filenamen in
  210.    der File-Variable <file var>. Falls TOS 1.4 oder neuer installiert ist,
  211.    wird <string> als Überschrift der Fileselektorbox ausgegeben. Falls in
  212.    <file var> bereits etwas eingetragen ist, wird dieser Name als Default-
  213.    Pfad in der Fileselektorbox gesetzt, ansonsten der Pfad der Install-Datei.
  214.    Der vorgewählte Filename ist '*.*'. Wird zusätzlich zum Pfad ein Dateiname
  215.    eingegeben, zählt dies als neu zu erzeugender Ordner.
  216.  
  217.  
  218. #request "<string>" [<boolean var>]
  219.    Bringt via form_alert() eine Alarmbox auf den Bildschirm. <string> hat
  220.    ab dem zweiten Zeichen das bei form_alert() übliche Format, das erste
  221.    Zeichen ist eine Ziffer, die den Default-Button angibt ('0' = kein
  222.    Default, '1' = erster Button ist Default, ...). Das Format von <string>
  223.    ist also:
  224.  
  225.       "<default-button>[<icon>][<text>][<buttons>]"
  226.  
  227.    Falls <boolean var> angegeben wurde, wird das Ergebnis von form_alert()
  228.    dort abgespeichert, wobei 1 als false und alle Zahlen grö₧er als 1 als
  229.    true gespeichert werden.
  230.  
  231.       Daraus folgt, da₧ es nicht sinnvoll ist, in einer mit #request
  232.       erzeugten Alarmbox mehr als zwei Buttons anzugeben. Man wird diesen
  233.       Befehl also nur entweder als Hinweis (1 Button "OK", keine <boolean
  234.       var> angegeben) oder als Frage, die mit ja oder nein beantwortet
  235.       werden kann (2 Buttons, Ergebnis wird in <boolean var> abgespeichert),
  236.       verwenden.
  237.  
  238.  
  239. #if <boolean var> <commands> [#else <commands>] #fi
  240.    Wenn der Wert von <boolean var> true ist, werden die <commands> vor dem
  241.    #else oder #fi ausgeführt. Ist der Wert false, werden die ersten
  242.    <commands> übersprungen und entweder die Befehle zwischen #else und
  243.    #fi ausgeführt, oder gar nichts, wenn der #else-Teil fehlt. Es dürfen
  244.    mehrere #if-#else-#fi-Konstrukte verschachtelt werden.
  245.  
  246.  
  247. #requiredspace <abspath> <size>
  248.    Fragt den noch vorhandenen Speicherplatz auf dem Gerät, das durch <abspath>
  249.    angegeben wird, ab (wichtig ist nur der Laufwerksname im ersten Zeichen
  250.    von <abspath>, der restliche Pfad wird ignoriert). Falls der vorhandene
  251.    Speicherplatz kleiner als <size> ist, gibt es eine Fehlermeldung. Der
  252.    Benutzer kann dann entscheiden, ob er die Meldung ignorieren oder die
  253.    Installation abbrechen will (ignorieren kann z.B. nützlich sein, wenn man
  254.    das Paket auf einer komprimierenden RAM-Disk installieren will).
  255.  
  256.  
  257. #setdir <abspath>
  258.    Setzt das aktuelle Direktory auf <abspath>. Dabei werden alle Ordner
  259.    in <abspath>, die noch nicht existieren, erzeugt. Nachfolgende #copy-
  260.    und #extract-Befehle erzeugen die Dateien im aktuellen Directory.
  261.  
  262.  
  263. #copy <relfile> [<checksum>]
  264.    Kopiert die in <relfile> angegebene Datei in das aktuelle Directory.
  265.    Falls eine <checksum> angegeben ist, wird diese mit der Prüfsumme
  266.    der zu kopierenden Datei verglichen und im Fehlerfall eine Fehlermeldung
  267.    (Abbruch/ignorieren/nochmal) erzeugt. Die Prüfsumme entspricht der
  268.    von ARC verwendeten CRC-ähnlichen Prüfsumme.
  269.  
  270.    Da im #copy-Befehl nur ein Pfad angegeben wird, müssen daraus sowohl
  271.    der Quell- als auch der Zielpfad gewonnen werden. Dazu wird <relfile>
  272.    in einen relativen Pfad <relpath> und einen Dateinamen <filename>
  273.    zerlegt. Das aktuelle Directory wird als <current dir> bezeichnet.
  274.    <install dir> sei das Directory, von dem die Install-Datei gelesen
  275.    wurde. Dann wird die Datei <install dir>\<relpath>\<filename> nach
  276.    <current dir>\<filename> kopiert, entspricht also dem Unix-Befehl
  277.    (für MS-DOS muss nur cp durch copy ersetzt werden)
  278.  
  279.       cp  <install dir>\<relpath>\<filename>  <current dir>\<filename>
  280.  
  281.  
  282. #extract <relfile> <pattern>
  283.    Extrahiert aus dem Archiv <relfile> die mit <pattern> angegebenen
  284.    Dateien. Mit den Definitionen beim #copy-Befehl ist der vollständige
  285.    Name des Archivs dann <install dir>\<relfile>, die in <pattern>
  286.    angegebenen Dateien werden in das <current dir> extrahiert. Das Format
  287.    des Archivs ist kompatibel zu LHARC (LZH-Dateien).
  288.  
  289. #replace "<string1>" "<string2>" <absfile>
  290.    Ersetzt in der durch <absfile> angegebenen Datei alle Vorkommen von
  291.    <string1> durch <string2>. In allen drei Parametern kann eine Filevaria-
  292.    ble vorkommen.
  293.  
  294.       Dieser Befehl wird vor allem dazu benutzt, um bestimmte Setup-
  295.       Dateien (z.B. texsetup) zu installieren. Dort kann dann z.B.
  296.       "K:\TEX\" durch den Wert der Variablen target ersetzt werden:
  297.  
  298.          #replace "K:\\TEX\\" "target" target\texsetup
  299.  
  300.   Achtung: Filevariablen hören immer mit einem '\' auf. Es ist also sinn-
  301.   voller, "ROOT\\" durch "target" zu ersetzen, als "ROOT", weil im letzteren
  302.   Fall noch ein '\' angehängt würde.
  303.  
  304.  
  305. #checkdisklabel <filename>
  306.    Falls die Installation von Diskette erfolgt (<install dir> ist auf
  307.    A: oder B:), wird das Diskettenlabel überprüft. Wenn es nicht mit
  308.    <filename> übereinstimmt, wird der Benutzer ermahnt, doch bitte die
  309.    richtige Diskette einzulegen. Es ist möglich, diesen Hinweis zu ignorieren.
  310.  
  311.  
  312. #execute <abspath> (<parameter>)*
  313.   <abspath> gibt den Namen des zu startenden Programmes an, parameter sind
  314.   die zu übergebenden Parameter, wobei diese als Pfade interpretiert werden.
  315.   Wenn also am Anfang eines Parameters eine Filevariable steht, so wird
  316.   diese expandiert.
  317.  
  318.  
  319. #end
  320.    Beendet die Installation (und damit auch das Ausführen der Install-Datei)
  321.    und gibt die Abschlu₧meldung ("erfolgreich" oder Anzahl der aufgetretenen
  322.    Probleme) aus. Anschlie₧end wird der Benutzer gefragt, ob er weitere
  323.    Software installieren möchte oder das Programm verlassen möchte.
  324.  
  325.  
  326.  
  327. 4. Sonstiges
  328. ============
  329.  
  330. Es gibt eine spezielle Filevariable mit dem Namen source-dir, die mit dem
  331. Pfad der Install-Datei und damit der Quelle aller zu kopierenden Dateien
  332. vorbelegt ist. Eine Änderung dieser Variable führt *nicht* zu einer Änderung
  333. des Verhaltens der #copy-Funktion, weil diese Variable bei Programmstart
  334. lediglich initialisiert wird, später aber intern weder abgefragt noch ver-
  335. wendet wird.
  336.